// 对axios进行二次封装
import {
  removeToken,
  getToken,
  setToken
} from '@/utils/token'
import {
  refreshTokenApi
} from '@/api'
import { removeStorage } from '@/utils/storage'
// import router from '@/router'
// 引入
import axios from 'axios'
import router from '@/router'
import { Toast } from 'vant'
// 基地址设置
axios.defaults.baseURL = 'http://geek.itheima.net'
// 响应时间设置
axios.defaults.timeout = 8000
// 请求和相应拦截器

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  // 如果本次请求中请求头的Authorization字段没有值，需要携带token
  if (config.headers.Authorization === undefined) {
    config.headers.Authorization = `Bearer ${getToken()}`
  }
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  return response
}, async function (error) {
  // 对响应错误做点什么
  // console.dir(error)
  // token过期，判断状态码为401时，清除token，跳转登录
  if (error.response.status === 401) {
    console.log(22)
    removeToken()
    // 续签方式1：token过期跳转登录页提醒用户重新登录
    // router.replace('/login')
    // 续签方式2：token过期，用户无感知刷新
    const re = await refreshTokenApi() // 使用refresh_token获取新的token
    setToken(re.data.data.token) // 保存新的token到本地
    // 设置请求头
    error.config.headers.Authorization = `Bearer ${re.data.data.token}`
    return axios(error.config) // 把未完成的请求对象, 再装入回去, 重新发送一次请求
    // refresh_token过期
  } else if (error.response.status === 500 && error.config.url === '/v1_0/authorizations') {
    // 清除token和refresh_token
    Toast.success('身份过期，请重新登录')
    removeToken()
    removeStorage('refresh_token')
    // 跳转登录页
    // console.log(router)
    router.replace({
      path: '/login',
      query: {
        pa: router.currentRoute.fullPath
      } // 访问未遂的当前页面的路由地址传给登录页登录时使用
    })
    // 相当于
    // router.push('/login?pa=router.currentRoute.fullPath')
  }
  return Promise.reject(error)
})

// 导出
export default axios
// export default ({url,method,headers,data,params})={
// axios({
//   url, method, headers, data, params
// })
